Chapter overview
The primary goal of this dissertation is to describe how conceptual representations of mental life develop over early and middle childhood - but before diving into the development of this concept, it is useful to examine an adult endpoint. This is provided by my previous work on concepts of mental life among ordinary US adults (Weisman et al., 2017). This previous work provides the theoretical foundation for this dissertation, as well as a design template for the developmental studies to be discussed in the following chapters.
The studies described in Weisman et al. (2017) were designed to address our first question about conceptual representation: What are the fundamental components, or “conceptual units,” of ordinary people’s representation of mental life? Analyses of this question were the primary focus of Weisman et al. (2017). However, as I argued in Chapter XX, the design of these studies also provides an opportunity to examine two other key aspects of these representations: the organization of these units and the way this concept is applied or deployed in reasoning about the wide variety of “beings” in the world.
In this chapter, I provide a summary of my previous findings regarding the conceptual units employed by US adults in their representations of mental life, as published in Weisman et al. (2017). I then present a novel re-analysis of these datasets, designed to shed light on the organization of these conceptual units - a topic that was not addressed in Weisman et al. (2017). Finally, I summarize what these studies suggest about the application or deployment of these conceptual representations in reasoning about specific target beings (e.g., humans, other mammals, insects, technologies, etc.) - a topic that was only briefly discussed in Weisman et al. (2017). Taken together, these three perspectives on the data first published in Weisman et al. (2017) paint a comprehensive picture of US adults’ conceptual representations of mental life, which in turn provides an adult endpoint for the developmental work that constitutes the bulk of this dissertation.
Conceptual units

Organization of conceptual units



Application

LS0tCnRpdGxlOiAiQ2hhcHRlciBJSUk6IFN0dWR5IDE6IEFuIGFkdWx0IGVuZHBvaW50IGZvciBjb25jZXB0dWFsIHJlcHJlc2VudGF0aW9ucyBvZiBtZW50YWwgbGlmZSIKc3VidGl0bGU6ICJSZWFuYWx5c2lzIG9mIFdlaXNtYW4sIER3ZWNrLCAmIE1hcmttYW4gKDIwMTcpIgpvdXRwdXQ6CiAgaHRtbF9ub3RlYm9vazoKICAgIHRvYzogeWVzCiAgICB0b2NfZGVwdGg6IDQKICAgIHRvY19mbG9hdDogeWVzCmFsd2F5c19hbGxvd19odG1sOiB5ZXMKLS0tCgpgYGB7ciBnbG9iYWxfb3B0aW9ucywgaW5jbHVkZSA9IEZ9CmtuaXRyOjpvcHRzX2NodW5rJHNldChmaWcud2lkdGggPSAzLCBmaWcuYXNwID0gMC42NywKICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGUgPSBGLCBlY2hvID0gRikKYGBgCgpgYGB7cn0KIyAjIGZvciBrbml0dGluZyB0byAuZG9jeAojIG91dHB1dDoKIyAgIHdvcmRfZG9jdW1lbnQ6CiMgICAgIHJlZmVyZW5jZV9kb2N4OiAiLi93b3JkLXN0eWxlcy1yZWZlcmVuY2UuZG9jeCIKIyBhbHdheXNfYWxsb3dfaHRtbDogeWVzCiAgIAojICMgZm9yIGtuaXR0aW5nIHRvIC5uYi5odG1sIAojIG91dHB1dDoKIyAgIGh0bWxfbm90ZWJvb2s6CiMgICAgIHRvYzogeWVzCiMgICAgIHRvY19kZXB0aDogNAojICAgICB0b2NfZmxvYXQ6IHllcwpgYGAKCmBgYHtyfQpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShwc3ljaCkKbGlicmFyeShsYW5nY29nKSAjIHNvdXJjZTogaHR0cHM6Ly9naXRodWIuY29tL2xhbmdjb2cvbGFuZ2NvZy1wYWNrYWdlCiMgbGlicmFyeShsbWU0KQpsaWJyYXJ5KGJybXMpCmxpYnJhcnkoc3RyaW5naSkKbGlicmFyeShjb3dwbG90KQpsaWJyYXJ5KGthYmxlRXh0cmEpCgojIHBsb3R0aW5nCnRoZW1lX3NldCh0aGVtZV9idygpKQpjb2xvcnMyMSA8LSBjb2xvclJhbXBQYWxldHRlKGMoIiM2YTNkOWEiLCAiIzFmNzhiNCIsICIjMzNhMDJjIiwgIiNmZjdmMDAiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjZTMxYTFjIiksICMgZnJvbSBjb2xvcmJyZXdlcjIub3JnICJQYWlyZWQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhY2UgPSAiTGFiIikoMjEpCmBgYAoKYGBge3J9CiMgc3VwcG9ydGluZyBmdW5jdGlvbnMKc291cmNlKCIuL3NjcmlwdHMvbWF4X2ZhY3RvcnNfZWZhLlIiKQpzb3VyY2UoIi4vc2NyaXB0cy9yZXRlbl9mdW4uUiIpCnNvdXJjZSgiLi9zY3JpcHRzL3Bsb3RfZnVuLlIiKQpzb3VyY2UoIi4vc2NyaXB0cy9lZmFfZnVuLlIiKQpzb3VyY2UoIi4vc2NyaXB0cy9tc19mdW4uUiIpCgojIGZ1bmN0aW9ucyBmcm9tIFdlaXNtYW4gZXQgYWwuICgyMDE3KQpzb3VyY2UoIi4vc2NyaXB0cy9wbmFzX2Z1bi5SIikKYGBgCgpgYGB7cn0KIyBob3cgdG8gaGFuZGxlIG91dGxpZXJzCmNob3Nlbk91dGxpZXJIYW5kbGluZyA8LSAia2VlcCIgIyBSRVBPUlRFRDoga2VlcCBhbGwgZGF0YQojIGNob3Nlbk91dGxpZXJIYW5kbGluZyA8LSAicmVtb3ZlIgoKIyB3aGV0aGVyIHRvIGV4Y2x1ZGUgYW55IGNoYXJhY3RlcnMgaW4gc3R1ZHkgNApjaG9zZW5FeGNsdWRlIDwtICJub25lIiAjIFJFUE9SVEVEOiBrZWVwIGFsbCBjaGFyYWN0ZXJzCiMgY2hvc2VuRXhjbHVkZSA8LSBjKCJzdGFwbGVyIiwgImNhciIsICJjb21wdXRlciIpCgojIHdoZXRoZXIgdG8gZXhjbHVkZSBhbnkgbWVudGFsIGNhcGFjaXRpZXMKY2hvc2VuRXhjbHVkZUl0ZW0gPC0gIm5vbmUiICMgUkVQT1JURUQ6IGtlZXAgYWxsIGNhcGFjaXRpZXMKIyBjaG9zZW5FeGNsdWRlSXRlbSA8LSAiY29tcHV0YXRpb25zIgoKIyB3aGF0IGZhY3RvcmluZyBtZXRob2QgdG8gdXNlCmNob3Nlbl9mbSA8LSAibWlucmVzIiAjIFJFUE9SVEVEIChzZWUgYWx0ZXJuYXRpdmUgb3B0aW9ucyBpbiA/ZmEpCgojIHdoYXQgY29ycmVsYXRpb24gdG8gdXNlCmNob3NlbkNvclR5cGUgPC0gImNvciIgIyBSRVBPUlRFRDogcGVhcnNvbiBjb3JyZWxhdGlvbgojIGNob3NlbkNvclR5cGUgPC0gInBvbHkiICMgcG9seWNob3JpYyBjb3JyZWxhdGlvbgpjaG9zZW5fY29yIDwtIGNob3NlbkNvclR5cGUKCiMgd2hhdCByb3RhdGlvbiB0byB1c2UKY2hvc2VuUm90VHlwZSA8LSAidmFyaW1heCIgIyBSRVBPUlRFRDogdmFyaW1heCByb3RhdGlvbgojIGNob3NlblJvdFR5cGUgPC0gIm9ibGltaW4iICMgb2JsaW1pbiByb3RhdGlvbgojIGNob3NlblJvdFR5cGUgPC0gIm5vbmUiICMgbm8gcm90YXRpb24KY2hvc2VuX3JvdCA8LSBjaG9zZW5Sb3RUeXBlCgojIHdoYXQgc2NvcmluZyBtZXRob2QgdG8gdXNlCmNob3Nlbl9zY29yZXMgPC0gInRlbkJlcmdlIiAjIFJFUE9SVEVECiMgY2hvc2VuX3Njb3JlcyA8LSAicmVncmVzc2lvbiIgIyBhbHRlcm5hdGl2ZSBvcHRpb24KYGBgCgpgYGB7cn0KIyBzdHVkeSAxICgyMDE1LTEyLTE1LCAyIGNvbmRpdGlvbnMsIGJldHdlZW4tc3ViamVjdHMpCmRfcmF3X3N0dWR5MSA8LSByZWFkLmNzdigiaHR0cHM6Ly9vc2YuaW8vMjl2bmcvZG93bmxvYWQiKSAlPiUKICBtdXRhdGUoc3R1ZHkgPSAic3R1ZHkgMSIpCgojIHN0dWR5IDIgKDIwMTYtMDEtMTIsIDIgY29uZGl0aW9ucywgYmV0d2Vlbi1zdWJqZWN0cyAtIFJFUExJQ0FUSU9OKQpkX3Jhd19zdHVkeTIgPC0gcmVhZC5jc3YoImh0dHBzOi8vb3NmLmlvL2c3NmhqL2Rvd25sb2FkIikgJT4lCiAgbXV0YXRlKHN0dWR5ID0gInN0dWR5IDIiKQoKIyBzdHVkeSAzICgyMDE2LTAxLTEwLCAyIGNvbmRpdGlvbnMsIHdpdGhpbi1zdWJqZWN0cykKZF9yYXdfc3R1ZHkzIDwtIHJlYWQuY3N2KCJodHRwczovL29zZi5pby9lcHlrZi9kb3dubG9hZCIpICU+JQogIG11dGF0ZShzdHVkeSA9ICJzdHVkeSAzIikKCiMgc3R1ZHkgNCAoMjAxNi0wMS0xNCwgMjEgY29uZGl0aW9ucywgYmV0d2Vlbi1zdWJqZWN0cykKZF9yYXdfc3R1ZHk0IDwtIHJlYWQuY3N2KCJodHRwczovL29zZi5pby9rZHpnZS9kb3dubG9hZCIpICU+JQogIG11dGF0ZShzdHVkeSA9ICJzdHVkeSA0IikKYGBgCgpgYGB7cn0KIyBjbGVhbiB1cCBkYXRhc2V0cwpkMSA8LSBjbGVhbnVwKCJzdHVkeSAxIikKZDIgPC0gY2xlYW51cCgic3R1ZHkgMiIpCmQzIDwtIGNsZWFudXAoInN0dWR5IDMiKQpkNCA8LSBjbGVhbnVwKCJzdHVkeSA0IikgJT4lCiAgbXV0YXRlKGNvbmRpdGlvbiA9IGZhY3Rvcihjb25kaXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJzdGFwbGVyIiwgImNhciIsICJjb21wdXRlciIsICJyb2JvdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtaWNyb2JlIiwgImJlZXRsZSIsICJmaXNoIiwgImJsdWVqYXkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZnJvZyIsICJtb3VzZSIsICJnb2F0IiwgImJlYXIiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRvZyIsICJkb2xwaGluIiwgImVsZXBoYW50IiwgImNoaW1wIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZldHVzIiwgInB2cyIsICJpbmZhbnQiLCAiY2hpbGQiLCAiYWR1bHQiKSkpCmBgYAoKYGBge3J9CmQxX2FsbCA8LSBtYWtlRFJERigic3R1ZHkgMSIsICJhbGwiKQpkMl9hbGwgPC0gbWFrZURSREYoInN0dWR5IDIiLCAiYWxsIikKZDNfYWxsIDwtIG1ha2VEUkRGKCJzdHVkeSAzIiwgImFsbCIpCmQ0X2FsbCA8LSBtYWtlRFJERigic3R1ZHkgNCIsICJhbGwiKQpgYGAKCgojIENoYXB0ZXIgb3ZlcnZpZXcKClRoZSBwcmltYXJ5IGdvYWwgb2YgdGhpcyBkaXNzZXJ0YXRpb24gaXMgdG8gZGVzY3JpYmUgaG93IGNvbmNlcHR1YWwgcmVwcmVzZW50YXRpb25zIG9mIG1lbnRhbCBsaWZlIGRldmVsb3Agb3ZlciBlYXJseSBhbmQgbWlkZGxlIGNoaWxkaG9vZCAtIGJ1dCBiZWZvcmUgZGl2aW5nIGludG8gdGhlIGRldmVsb3BtZW50IG9mIHRoaXMgY29uY2VwdCwgaXQgaXMgdXNlZnVsIHRvIGV4YW1pbmUgYW4gYWR1bHQgZW5kcG9pbnQuIFRoaXMgaXMgcHJvdmlkZWQgYnkgbXkgcHJldmlvdXMgd29yayBvbiBjb25jZXB0cyBvZiBtZW50YWwgbGlmZSBhbW9uZyBvcmRpbmFyeSBVUyBhZHVsdHMgKFdlaXNtYW4gZXQgYWwuLCAyMDE3KS4gVGhpcyBwcmV2aW91cyB3b3JrIHByb3ZpZGVzIHRoZSB0aGVvcmV0aWNhbCBmb3VuZGF0aW9uIGZvciB0aGlzIGRpc3NlcnRhdGlvbiwgYXMgd2VsbCBhcyBhIGRlc2lnbiB0ZW1wbGF0ZSBmb3IgdGhlIGRldmVsb3BtZW50YWwgc3R1ZGllcyB0byBiZSBkaXNjdXNzZWQgaW4gdGhlIGZvbGxvd2luZyBjaGFwdGVycy4KClRoZSBzdHVkaWVzIGRlc2NyaWJlZCBpbiBXZWlzbWFuIGV0IGFsLiAoMjAxNykgd2VyZSBkZXNpZ25lZCB0byBhZGRyZXNzIG91ciBmaXJzdCBxdWVzdGlvbiBhYm91dCBjb25jZXB0dWFsIHJlcHJlc2VudGF0aW9uOiBXaGF0IGFyZSB0aGUgZnVuZGFtZW50YWwgY29tcG9uZW50cywgb3IgImNvbmNlcHR1YWwgdW5pdHMsIiBvZiBvcmRpbmFyeSBwZW9wbGUncyByZXByZXNlbnRhdGlvbiBvZiBtZW50YWwgbGlmZT8gQW5hbHlzZXMgb2YgdGhpcyBxdWVzdGlvbiB3ZXJlIHRoZSBwcmltYXJ5IGZvY3VzIG9mIFdlaXNtYW4gZXQgYWwuICgyMDE3KS4gSG93ZXZlciwgYXMgSSBhcmd1ZWQgaW4gQ2hhcHRlciBYWCwgdGhlIGRlc2lnbiBvZiB0aGVzZSBzdHVkaWVzIGFsc28gcHJvdmlkZXMgYW4gb3Bwb3J0dW5pdHkgdG8gZXhhbWluZSB0d28gb3RoZXIga2V5IGFzcGVjdHMgb2YgdGhlc2UgcmVwcmVzZW50YXRpb25zOiB0aGUgb3JnYW5pemF0aW9uIG9mIHRoZXNlIHVuaXRzIGFuZCB0aGUgd2F5IHRoaXMgY29uY2VwdCBpcyBhcHBsaWVkIG9yIGRlcGxveWVkIGluIHJlYXNvbmluZyBhYm91dCB0aGUgd2lkZSB2YXJpZXR5IG9mICJiZWluZ3MiIGluIHRoZSB3b3JsZC4KCkluIHRoaXMgY2hhcHRlciwgSSBwcm92aWRlIGEgc3VtbWFyeSBvZiBteSBwcmV2aW91cyBmaW5kaW5ncyByZWdhcmRpbmcgdGhlIGNvbmNlcHR1YWwgdW5pdHMgZW1wbG95ZWQgYnkgVVMgYWR1bHRzIGluIHRoZWlyIHJlcHJlc2VudGF0aW9ucyBvZiBtZW50YWwgbGlmZSwgYXMgcHVibGlzaGVkIGluIFdlaXNtYW4gZXQgYWwuICgyMDE3KS4gSSB0aGVuIHByZXNlbnQgYSBub3ZlbCByZS1hbmFseXNpcyBvZiB0aGVzZSBkYXRhc2V0cywgZGVzaWduZWQgdG8gc2hlZCBsaWdodCBvbiB0aGUgb3JnYW5pemF0aW9uIG9mIHRoZXNlIGNvbmNlcHR1YWwgdW5pdHMgLSBhIHRvcGljIHRoYXQgd2FzIG5vdCBhZGRyZXNzZWQgaW4gV2Vpc21hbiBldCBhbC4gKDIwMTcpLiBGaW5hbGx5LCBJIHN1bW1hcml6ZSB3aGF0IHRoZXNlIHN0dWRpZXMgc3VnZ2VzdCBhYm91dCB0aGUgYXBwbGljYXRpb24gb3IgZGVwbG95bWVudCBvZiB0aGVzZSBjb25jZXB0dWFsIHJlcHJlc2VudGF0aW9ucyBpbiByZWFzb25pbmcgYWJvdXQgc3BlY2lmaWMgdGFyZ2V0IGJlaW5ncyAoZS5nLiwgaHVtYW5zLCBvdGhlciBtYW1tYWxzLCBpbnNlY3RzLCB0ZWNobm9sb2dpZXMsIGV0Yy4pIC0gYSB0b3BpYyB0aGF0IHdhcyBvbmx5IGJyaWVmbHkgZGlzY3Vzc2VkIGluIFdlaXNtYW4gZXQgYWwuICgyMDE3KS4gVGFrZW4gdG9nZXRoZXIsIHRoZXNlIHRocmVlIHBlcnNwZWN0aXZlcyBvbiB0aGUgZGF0YSBmaXJzdCBwdWJsaXNoZWQgaW4gV2Vpc21hbiBldCBhbC4gKDIwMTcpIHBhaW50IGEgY29tcHJlaGVuc2l2ZSBwaWN0dXJlIG9mIFVTIGFkdWx0cycgY29uY2VwdHVhbCByZXByZXNlbnRhdGlvbnMgb2YgbWVudGFsIGxpZmUsIHdoaWNoIGluIHR1cm4gcHJvdmlkZXMgYW4gYWR1bHQgZW5kcG9pbnQgZm9yIHRoZSBkZXZlbG9wbWVudGFsIHdvcmsgdGhhdCBjb25zdGl0dXRlcyB0aGUgYnVsayBvZiB0aGlzIGRpc3NlcnRhdGlvbi4KCiMgQ29uY2VwdHVhbCB1bml0cwoKYGBge3J9CiMgZG8gYWxsIEVGQXMKZWZhX3BuYXNkMSA8LSBmYV9mdW4oZDFfYWxsICU+JSByZW5hbWVfZnVuKCksIHJldGVuX2Z1bihkMV9hbGwsICJ2YXJpbWF4IikpCmVmYV9wbmFzZDIgPC0gZmFfZnVuKGQyX2FsbCAlPiUgcmVuYW1lX2Z1bigpLCByZXRlbl9mdW4oZDJfYWxsLCAidmFyaW1heCIpKQplZmFfcG5hc2QzIDwtIGZhX2Z1bihkM19hbGwgJT4lIHJlbmFtZV9mdW4oKSwgcmV0ZW5fZnVuKGQzX2FsbCwgInZhcmltYXgiKSkKZWZhX3BuYXNkNCA8LSBmYV9mdW4oZDRfYWxsICU+JSByZW5hbWVfZnVuKCksIHJldGVuX2Z1bihkNF9hbGwsICJ2YXJpbWF4IikpCmBgYAoKYGBge3J9CiMgbWFrZSBhbGwgaGVhdG1hcHMKZmlnMDFhIDwtIGhlYXRtYXBfZnVuKGVmYV9wbmFzZDEsIGZhY3Rvcl9uYW1lcyA9IGMoIkJPRFkiLCAiSEVBUlQiLCAiTUlORCIpKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSArCiAgbGFicyh0aXRsZSA9IHBhc3RlMCgiV2Vpc21hbiBldCBhbC4sICgyMDE3KTogU3R1ZHkgMVxuKEFkdWx0cywgbj0iLCAKICAgICAgICAgICAgICAgICAgICAgIG5yb3coZDFfYWxsKSwgIikiKSkKCmZpZzAxYiA8LSBoZWF0bWFwX2Z1bihlZmFfcG5hc2QyLCBmYWN0b3JfbmFtZXMgPSBjKCJCT0RZIiwgIkhFQVJUIiwgIk1JTkQiKSkgKyAKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpICsKICBsYWJzKHRpdGxlID0gcGFzdGUwKCJXZWlzbWFuIGV0IGFsLiwgKDIwMTcpOiBTdHVkeSAyXG4oQWR1bHRzLCBuPSIsIAogICAgICAgICAgICAgICAgICAgICAgbnJvdyhkMl9hbGwpLCAiKSIpKQoKZmlnMDFjIDwtIGhlYXRtYXBfZnVuKGVmYV9wbmFzZDMsIGZhY3Rvcl9uYW1lcyA9IGMoIkJPRFkiLCAiSEVBUlQiLCAiTUlORCIpKSArIAogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikgKwogIGxhYnModGl0bGUgPSBwYXN0ZTAoIldlaXNtYW4gZXQgYWwuLCAoMjAxNyk6IFN0dWR5IDNcbihBZHVsdHMsIG49IiwgCiAgICAgICAgICAgICAgICAgICAgICBucm93KGQzX2FsbCksICIpIikpCgpmaWcwMWQgPC0gaGVhdG1hcF9mdW4oZWZhX3BuYXNkNCwgZmFjdG9yX25hbWVzID0gYygiQk9EWSIsICJIRUFSVCIsICJNSU5EIikpICsgCiAgIyB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpICsKICBsYWJzKHRpdGxlID0gcGFzdGUwKCJXZWlzbWFuIGV0IGFsLiwgKDIwMTcpOiBTdHVkeSA0XG4oQWR1bHRzLCBuPSIsIAogICAgICAgICAgICAgICAgICAgICAgbnJvdyhkNF9hbGwpLCAiKSIpKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA5LCBpbmNsdWRlID0gVH0KIyBwdXQgZW0gYWxsIHRvZ2V0aGVyIGFuZCB3aGF0IGRvIHlvdSBnZXQKZmlnMDFfcGxvdHMgPC0gcGxvdF9ncmlkKGZpZzAxYSwgZmlnMDFiLCBmaWcwMWMsIGZpZzAxZCwKICAgICAgICAgICAgICAgICAgICAgICAgIG5yb3cgPSAxLCByZWxfd2lkdGhzID0gYygxLCAxLCAxLCAxLjIpLCBsYWJlbHMgPSAiQVVUTyIpCgpmaWcwMV93aXRoX2NhcHRpb24gPC0gYWRkX3N1YihmaWcwMV9wbG90cywgc3RyX3dyYXAoIkZpZ3VyZSAzLjE6IEV4cGxvcmF0b3J5IGZhY3RvciBhbmFseXNpcyByZXN1bHRzIGZvciBhZHVsdHMgaW4gV2Vpc21hbiBldCBhbC4gKDIwMTcpLCBTdHVkaWVzIDEtNC4gSW4gU3R1ZGllcyAxIChBKSBhbmQgMiAoQiksIGVhY2ggcGFydGljaXBhbnQgYXNzZXNzZWQgNDAgbWVudGFsIGNhcGFjaXRpZXMgZm9yIG9uZSBvZiB0d28gdGFyZ2V0IGNoYXJhY3RlcnM6IGEgYmVldGxlIG9yIGEgcm9ib3QuIEluIFN0dWR5IDMgKEMpLCBlYWNoIHBhcnRpY2lwYW50IGFzc2Vzc2VkIDQwIG1lbnRhbCBjYXBhY2l0aWVzIGZvciB0d28gdGFyZ2V0IGNoYXJhY3RlcnMsIHByZXNlbnRlZCBzaWRlIGJ5IHNpZGU6IGEgYmVldGxlIGFuZCBhIHJvYm90LiBJbiBTdHVkeSA0IChEKSwgZWFjaCBwYXJ0aWNpcGFudCBhc3Nlc3NlZCA0MCBtZW50YWwgY2FwYWNpdGllcyBmb3Igb25lIG9mIDIxIHRhcmdldCBjaGFyYWN0ZXJzLCBpbmNsdWRpbmcgYSB2YXJpZXR5IG9mIGh1bWFucywgbm9uLWh1bWFuIGFuaW1hbHMsIHRlY2hub2xvZ2llcywgYW5kIG90aGVyIGVudGl0aWVzLiIsIDIxMCksIHggPSAwLCBoanVzdCA9IDApCmdnZHJhdyhmaWcwMV93aXRoX2NhcHRpb24pCmBgYAoKYGBge3J9CiMgbGlicmFyeShwbG90bHkpCiMgcGxvdF9seShsb2FkaW5nc19mdW4oZWZhX3BuYXNkNCwgbG9uZ193aWRlID0gIndpZGUiKSwgCiMgICAgICAgICB4ID0gfkYxLCB5ID0gfkYyLCB6ID0gfkYzLAojICAgICAgICAgdGV4dCA9IH5jYXBhY2l0eSkgJT4lCiMgICBhZGRfbWFya2VycygpICU+JQojICAgbGF5b3V0KHNjZW5lID0gbGlzdCh4YXhpcyA9IGxpc3QodGl0bGUgPSAnQk9EWScpLAojICAgICAgICAgICAgICAgICAgICAgICB5YXhpcyA9IGxpc3QodGl0bGUgPSAnSEVBUlQnKSwKIyAgICAgICAgICAgICAgICAgICAgICAgemF4aXMgPSBsaXN0KHRpdGxlID0gJ01JTkQnKSkpCmBgYAoKCiMgT3JnYW5pemF0aW9uIG9mIGNvbmNlcHR1YWwgdW5pdHMKCmBgYHtyfQpjYXRzY29yZV9hbHBoYV9mdW5fcG5hcyA8LSBmdW5jdGlvbihkZiwgd2hpY2hfZWZhKXsKICAKICBob3dfbWFueV9jYXAgPC0gbG9hZGluZ3NfZnVuKHdoaWNoX2VmYSkgJT4lCiAgICBncm91cF9ieShjYXBhY2l0eSkgJT4lCiAgICB0b3BfbigxLCBsb2FkaW5nKSAlPiUKICAgIHVuZ3JvdXAoKSAlPiUKICAgIGNvdW50KGZhY3RvcikKICBob3dfbWFueV9jYXAgPC0gbWluKGhvd19tYW55X2NhcCRuKQogIAogIGxvYWRpbmdzIDwtIGxvYWRpbmdzX2Z1bih3aGljaF9lZmEpICU+JQogICAgZ3JvdXBfYnkoY2FwYWNpdHkpICU+JQogICAgdG9wX24oMSwgbG9hZGluZykgJT4lCiAgICB1bmdyb3VwKCkgJT4lCiAgICBncm91cF9ieShmYWN0b3IpICU+JQogICAgdG9wX24oaG93X21hbnlfY2FwLCBsb2FkaW5nKSAlPiUKICAgIHVuZ3JvdXAoKQogIAogIGJ5cGFydCA8LSAgZGYgJT4lCiAgICAjIHNlbGVjdCgtYyhzdHVkeSwgZGF0ZSwgc3RhcnRfdGltZSwgZW5kX3RpbWUsIGR1cmF0aW9uLCBmaW5pc2hlZCwgbXR1cmtjb2RlLAogICAgIyAgICAgICAgICAgQ0FUQ0gsIHlvYiwgZ2VuZGVyLCBmZWVkYmFjaywgZGlzcGxheV9vcmRlciwgZmluaXNoZWRfbW9kLCAKICAgICMgICAgICAgICAgIHlvYl9jb3JyZWN0LCBhZ2VfYXBwcm94LCByYWNlX2NhdCwgcmVsaWdpb25fY2F0KSkgJT4lCiAgICBzZWxlY3Qoc3ViaWQsIGNvbmRpdGlvbiwgYGZlZWxpbmcgaGFwcHlgOmBleHBlcmllbmNpbmcgcHJpZGVgKSAlPiUKICAgIGRpc3RpbmN0KCkgJT4lCiAgICBnYXRoZXIoY2FwYWNpdHksIHJlc3BvbnNlX251bSwgLWMoc3ViaWQsIGNvbmRpdGlvbikpICU+JQogICAgZmlsdGVyKGNhcGFjaXR5ICVpbiUgbG9hZGluZ3MkY2FwYWNpdHkpICU+JQogICAgbGVmdF9qb2luKGxvYWRpbmdzKQogIAogIGFscGhhIDwtIE5VTEwKICBmb3IoaSBpbiBsZXZlbHMoZmFjdG9yKGJ5cGFydCRmYWN0b3IpKSl7CiAgICBhIDwtIGJ5cGFydCAlPiUKICAgICAgZmlsdGVyKGZhY3RvciA9PSBpKSAlPiUKICAgICAgc2VsZWN0KHN1YmlkLCBjb25kaXRpb24sIGNhcGFjaXR5LCByZXNwb25zZV9udW0pICU+JQogICAgICBzcHJlYWQoY2FwYWNpdHksIHJlc3BvbnNlX251bSkgJT4lCiAgICAgIGFscGhhKCkKICAgIAogICAgYWxwaGFbaV0gPC0gYSR0b3RhbCRyYXdfYWxwaGEKICB9CiAgCiAgcmV0dXJuKGFscGhhKQp9CmBgYAoKYGBge3J9CnN1cHByZXNzV2FybmluZ3MoY2F0c2NvcmVfYWxwaGFfZnVuX3BuYXMocmVuYW1lX2Z1bihkMSksIGVmYV9wbmFzZDEpKQpzdXBwcmVzc1dhcm5pbmdzKGNhdHNjb3JlX2FscGhhX2Z1bl9wbmFzKHJlbmFtZV9mdW4oZDIpLCBlZmFfcG5hc2QyKSkKc3VwcHJlc3NXYXJuaW5ncyhjYXRzY29yZV9hbHBoYV9mdW5fcG5hcyhkMyAlPiUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5hbWVfZnVuKCkgJT4lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0KC1jb25kaXRpb24pICU+JQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmFtZShjb25kaXRpb24gPSB0YXJnZXQpLCBlZmFfcG5hc2QzKSkKc3VwcHJlc3NXYXJuaW5ncyhjYXRzY29yZV9hbHBoYV9mdW5fcG5hcyhyZW5hbWVfZnVuKGQ0KSwgZWZhX3BuYXNkNCkpCmBgYAoKCmBgYHtyfQpwbG90MDJhIDwtIGhpZXJfcGxvdF9hZ2dfcG5hcyhkZiA9IGQxICU+JSByZW5hbWVfZnVuKCksIHdoaWNoX2VmYSA9IGVmYV9wbmFzZDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9ycyA9IGMoIiNmYjlhOTkiLCAiIzFmNzhiNCIpLCBzaGFwZXMgPSBjKDIxLCAyMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBUUlVFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICJXZWlzbWFuIGV0IGFsLiAoMjAxNyk6IFN0dWR5IDEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJfbGV0dGVyID0gIkEiKQoKcGxvdDAyYiA8LSBoaWVyX3Bsb3RfYWdnX3BuYXMoZGYgPSBkMiAlPiUgcmVuYW1lX2Z1bigpLCB3aGljaF9lZmEgPSBlZmFfcG5hc2QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcnMgPSBjKCIjZmI5YTk5IiwgIiMxZjc4YjQiKSwgc2hhcGVzID0gYygyMSwgMjIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lID0gVFJVRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiV2Vpc21hbiBldCBhbC4gKDIwMTcpOiBTdHVkeSAyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiX2xldHRlciA9ICJCIikKCnBsb3QwMmMgPC0gaGllcl9wbG90X2FnZ19wbmFzKGRmID0gZDMgJT4lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuYW1lX2Z1bigpICU+JQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdCgtY29uZGl0aW9uKSAlPiUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5hbWUoY29uZGl0aW9uID0gdGFyZ2V0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpY2hfZWZhID0gZWZhX3BuYXNkMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JzID0gYygiI2ZiOWE5OSIsICIjMWY3OGI0IiksIHNoYXBlcyA9IGMoMjEsIDIyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9IFRSVUUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIldlaXNtYW4gZXQgYWwuICgyMDE3KTogU3R1ZHkgMyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYl9sZXR0ZXIgPSAiQyIpCgpwbG90MDJkIDwtIGhpZXJfcGxvdF9hZ2dfcG5hcyhkZiA9IGQ0ICU+JSByZW5hbWVfZnVuKCksIHdoaWNoX2VmYSA9IGVmYV9wbmFzZDQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9ycyA9IGNvbG9yczIxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFwZXMgPSByZXAoMjEsIDIxKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9IFRSVUUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIldlaXNtYW4gZXQgYWwuICgyMDE3KTogU3R1ZHkgNCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYl9sZXR0ZXIgPSAiRCIpCmBgYAoKYGBge3J9CmZpZzAyX3Bsb3RzIDwtIHBsb3RfZ3JpZChwbG90MDJhLCBwbG90MDJiLCBwbG90MDJjLCBwbG90MDJkLCBucm93ID0gMSkKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNywgZmlnLmFzcCA9IDAuODUsIGluY2x1ZGUgPSBUfQpmaWcwMl93aXRoX2NhcHRpb24gPC0gYWRkX3N1YihmaWcwMl9wbG90cywgc3RyX3dyYXAoIkZpZ3VyZSAzLjI6IENvbXBhcmlzb24gb2YgZW5kb3JzZW1lbnRzIG9mIEJPRFksIEhFQVJULCBhbmQgTUlORCBjYXBhY2l0aWVzIGFtb25nIGFkdWx0cyBpbiBXZWlzbWFuIGV0IGFsLiAoMjAxNyksIFN0dWRpZXMgMS00IChjb2x1bW5zIEEtRCkuIFRoZSB0b3Agcm93IChBMS1EMSkgY29tcGFyZXMgZW5kb3JzZW1lbnRzIG9mIEJPRFkgdnMuIEhFQVJUIGNhcGFjaXRpZXM7IHRoZSBtaWRkbGUgcm93IChBMi1EMikgY29tcGFyZXMgTUlORCB2cy4gSEVBUlQ7IGFuZCB0aGUgYm90dG9tIHJvdyAoQTMtRDMpIGNvbXBhcmVzIEJPRFkgdnMuIE1JTkQuIEZvciBlYWNoIHN0dWR5LCBFRkEgd2FzIHVzZWQgdG8gZGV0ZXJtaW5lIHdoaWNoIGNhcGFjaXRpZXMgd2VyZSBjb25zaWRlcmVkIHBhcnQgb2YgQk9EWSwgSEVBUlQsIGFuZCBNSU5EIChzZWUgbWFpbiB0ZXh0KS4gRm9yIGVhY2ggY2FwYWNpdHksIGRlZ3JlZSBvZiBlbmRvcnNlbWVudCBjb3VsZCByYW5nZSBmcm9tIDAgKG5vdCBhdCBhbGwgY2FwYWJsZSkgdG8gNiAoZnVsbHkgY2FwYWJsZSkuIEVycm9yIGJhcnMgYXJlIDk1JSBib290c3RyYXBwZWQgY29uZmlkZW5jZSBpbnRlcnZhbHMuIiwgMTUwKSwgeCA9IDAsIGhqdXN0ID0gMCkKZ2dkcmF3KGZpZzAyX3dpdGhfY2FwdGlvbikKYGBgCgpgYGB7cn0KbmV3ZnVuIDwtIGZ1bmN0aW9uKGRmLCB3aGljaF9lZmEsIGNvbG9ycywgZnVuID0gImRpZmYiLCBwb2ludHMgPSBUKSB7CiAgCiAgcGxvdF9kZiA8LSBkZiAlPiUgCiAgICBjYXRzY29yZV9mdW5fcG5hcyh3aGljaF9lZmEgPSB3aGljaF9lZmEpICU+JQogICAgZGlzdGluY3QoKSAlPiUKICAgIHNwcmVhZChmYWN0b3IsIHNjb3JlKQogIAogIGlmKGZ1biA9PSAiZGlmZiIpewogICAgcGxvdF9kZiA8LSBwbG90X2RmICU+JQogICAgbXV0YXRlKHBhaXIxX0YxbWludXNGMiA9IEYxIC0gRjIsCiAgICAgICAgICAgcGFpcjJfRjNtaW51c0YyID0gRjMgLSBGMiwKICAgICAgICAgICBwYWlyM19GMW1pbnVzRjMgPSBGMSAtIEYzKQogIH0KICAKICBpZihmdW4gPT0gInJhdGlvIil7CiAgICBwbG90X2RmIDwtIHBsb3RfZGYgJT4lCiAgICAgIG11dGF0ZV9hdCh2YXJzKHN0YXJ0c193aXRoKCJGIikpLCBmdW5zKC4gKyAwLjAwMSkpICU+JQogICAgICBtdXRhdGUocGFpcjFfRjFkaXZGMiA9IEYxL0YyLAogICAgICAgICAgICAgcGFpcjJfRjNkaXZGMiA9IEYzL0YyLAogICAgICAgICAgICAgcGFpcjNfRjFkaXZGMyA9IEYxL0YzKQogIH0KICAKICBwbG90X2RmIDwtIHBsb3RfZGYgJT4lCiAgICBzZWxlY3QoLWMoRjEsIEYyLCBGMykpICU+JQogICAgZ2F0aGVyKGZhY3RvcnMsIGNvbXAsIHN0YXJ0c193aXRoKCJwYWlyIikpICU+JQogICAgZGlzdGluY3QoKQogIAogIHBsb3QgPC0gcGxvdF9kZiAlPiUKICAgIGdncGxvdChhZXMoeCA9IGZhY3RvcnMsIHkgPSBjb21wLCBjb2xvciA9IGNvbmRpdGlvbikpCiAgCiAgaWYocG9pbnRzKXsKICAgIHBsb3QgPC0gcGxvdCArCiAgICAgIGdlb21fcG9pbnQoYWVzKGZpbGwgPSBjb25kaXRpb24pLCBhbHBoYSA9IDAuMiwKICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2ppdHRlcmRvZGdlKGppdHRlci5oZWlnaHQgPSAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaml0dGVyLndpZHRoID0gMC43LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9kZ2Uud2lkdGggPSAwLjc1KSkKICB9CiAgCiAgcGxvdCA8LSBwbG90ICsKICAgICMgZ2VvbV9wb2ludHJhbmdlKGRhdGEgPSAuCiAgICAjICAgICAgICAgICAgICAgICAlPiUgZ3JvdXBfYnkoZmFjdG9ycywgY29uZGl0aW9uKSAlPiUKICAgICMgICAgICAgICAgICAgICAgICAgbXVsdGlfYm9vdF9zdGFuZGFyZChjb2wgPSAiY29tcCIpICU+JQogICAgIyAgICAgICAgICAgICAgICAgICB1bmdyb3VwKCksCiAgICAjICAgICAgICAgICAgICAgICBhZXMoeSA9IG1lYW4sIHltaW4gPSBjaV9sb3dlciwgeW1heCA9IGNpX3VwcGVyLCAKICAgICMgICAgICAgICAgICAgICAgICAgICBmaWxsID0gY29uZGl0aW9uKSwKICAgICMgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjc1KSwgZmF0dGVuID0gMS4yLAogICAgIyAgICAgICAgICAgICAgICAgc2hhcGUgPSAyMSwgY29sb3IgPSAiYmxhY2siKSArCiAgICBnZW9tX3BvaW50cmFuZ2UoZGF0YSA9IC4KICAgICAgICAgICAgICAgICAgICAlPiUgZ3JvdXBfYnkoZmFjdG9ycykgJT4lCiAgICAgICAgICAgICAgICAgICAgICBtdWx0aV9ib290X3N0YW5kYXJkKGNvbCA9ICJjb21wIikgJT4lCiAgICAgICAgICAgICAgICAgICAgICB1bmdyb3VwKCksCiAgICAgICAgICAgICAgICAgICAgYWVzKHkgPSBtZWFuLCB5bWluID0gY2lfbG93ZXIsIHltYXggPSBjaV91cHBlciksCiAgICAgICAgICAgICAgICAgICAgc2hhcGUgPSAxOCwgY29sb3IgPSAiYmxhY2siKSArCiAgICAgIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjb2xvcnMpICsKICAgICAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gY29sb3JzKSArCiAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsCiAgICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEsIHZqdXN0ID0gMSkpCiAgCiAgaWYoZnVuID09ICJkaWZmIil7CiAgICBwbG90IDwtIHBsb3QgKyAKICAgICAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCwgbHR5ID0gMikgKwogICAgICBsYWJzKHggPSAiUGFpciIsIHkgPSAiRGlmZmVyZW5jZSIpICAKICB9CiAgCiAgaWYoZnVuID09ICJyYXRpbyIpewogICAgcGxvdCA8LSBwbG90ICsgCiAgICAgIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDEsIGx0eSA9IDIpICsKICAgICAgZmFjZXRfd3JhcCh+IGZhY3RvcnMsIHNjYWxlcyA9ICJmcmVlIikrCiAgICAgIGxhYnMoeCA9ICJQYWlyIiwgeSA9ICJSYXRpbyIpICAKICB9CiAgICAKICAgIHJldHVybihwbG90KQp9CmBgYAoKYGBge3J9CnBsb3QwNGEgPC0gbmV3ZnVuKGRmID0gcmVuYW1lX2Z1bihkMSksIHdoaWNoX2VmYSA9IGVmYV9wbmFzZDEsIAogICAgICAgICAgICAgICAgICBjb2xvcnMgPSBjKCIjZmI5YTk5IiwgIiMxZjc4YjQiKSkgKyB5bGltKC02LCA2KQoKcGxvdDA0YiA8LSBuZXdmdW4oZGYgPSByZW5hbWVfZnVuKGQyKSwgd2hpY2hfZWZhID0gZWZhX3BuYXNkMiwgCiAgICAgICAgICAgICAgICAgIGNvbG9ycyA9IGMoIiNmYjlhOTkiLCAiIzFmNzhiNCIpKSArIHlsaW0oLTYsIDYpCgpwbG90MDRjIDwtIG5ld2Z1bihkZiA9IGQzICU+JQogICAgICAgICAgICAgICAgICAgIHJlbmFtZV9mdW4oKSAlPiUKICAgICAgICAgICAgICAgICAgICBzZWxlY3QoLWNvbmRpdGlvbikgJT4lCiAgICAgICAgICAgICAgICAgICAgcmVuYW1lKGNvbmRpdGlvbiA9IHRhcmdldCksCiAgICAgICAgICAgICAgICAgIHdoaWNoX2VmYSA9IGVmYV9wbmFzZDMsIAogICAgICAgICAgICAgICAgICBjb2xvcnMgPSBjKCIjZmI5YTk5IiwgIiMxZjc4YjQiKSkgKyB5bGltKC02LCA2KQoKcGxvdDA0ZCA8LSBuZXdmdW4oZGYgPSByZW5hbWVfZnVuKGQ0KSwgd2hpY2hfZWZhID0gZWZhX3BuYXNkNCwgY29sb3JzID0gY29sb3JzMjEpICsgeWxpbSgtNiwgNikKYGBgCgpgYGB7cn0KZmlnMDRfcGxvdHMgPC0gcGxvdF9ncmlkKHBsb3QwNGEsIHBsb3QwNGIsIHBsb3QwNGMsIHBsb3QwNGQsIG5yb3cgPSAxLAogICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gIkFVVE8iKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA2LCBmaWcuYXNwID0gMC40LCBpbmNsdWRlID0gVH0KZmlnMDRfcGxvdHMKYGBgCgpgYGB7cn0KbmV3ZnVuX3N0YXQgPC0gZnVuY3Rpb24oZGYsIHdoaWNoX2VmYSwgY29sb3JzLCBmdW4gPSAiZGlmZiIsIHN0ZCA9IFQpIHsKICAKICBwbG90X2RmIDwtIGRmICU+JSAKICAgIGNhdHNjb3JlX2Z1bl9wbmFzKHdoaWNoX2VmYSA9IHdoaWNoX2VmYSkgJT4lCiAgICBkaXN0aW5jdCgpICU+JQogICAgc3ByZWFkKGZhY3Rvciwgc2NvcmUpCiAgCiAgaWYoZnVuID09ICJkaWZmIil7CiAgICBwbG90X2RmIDwtIHBsb3RfZGYgJT4lCiAgICBtdXRhdGUocGFpcjFfRjFtaW51c0YyID0gRjEgLSBGMiwKICAgICAgICAgICBwYWlyMl9GM21pbnVzRjIgPSBGMyAtIEYyLAogICAgICAgICAgIHBhaXIzX0YxbWludXNGMyA9IEYxIC0gRjMpCiAgfQogIAogIGlmKGZ1biA9PSAicmF0aW8iKXsKICAgIHBsb3RfZGYgPC0gcGxvdF9kZiAlPiUKICAgICAgbXV0YXRlX2F0KHZhcnMoc3RhcnRzX3dpdGgoIkYiKSksIGZ1bnMoLiArIDAuMDAxKSkgJT4lCiAgICAgIG11dGF0ZShwYWlyMV9GMWRpdkYyID0gRjEvRjIsCiAgICAgICAgICAgICBwYWlyMl9GM2RpdkYyID0gRjMvRjIsCiAgICAgICAgICAgICBwYWlyM19GMWRpdkYzID0gRjEvRjMpCiAgfQogIAogIHBsb3RfZGYgPC0gcGxvdF9kZiAlPiUKICAgIHNlbGVjdCgtYyhGMSwgRjIsIEYzKSkgJT4lCiAgICBnYXRoZXIoZmFjdG9ycywgY29tcCwgc3RhcnRzX3dpdGgoInBhaXIiKSkgJT4lCiAgICBkaXN0aW5jdCgpCiAgCiAgaWYoZnVuID09ICJkaWZmIil7CiAgICAKICAgIGlmKHN0ZCl7cGxvdF9kZiA8LSBwbG90X2RmICU+JQogICAgICBncm91cF9ieShmYWN0b3JzKSAlPiUKICAgICAgbXV0YXRlKGNvbXAgPSBzY2FsZShjb21wLCBjZW50ZXIgPSBGKSkgJT4lCiAgICAgIHVuZ3JvdXAoKQogICAgfQogICAgCiAgICByZXN1bHRzIDwtIGxtZTQ6OmxtZXIoY29tcCB+IDAgKyBmYWN0b3JzICsgKDEgfCBzdWJpZCksIHBsb3RfZGYpCiAgfQogIAogIGlmKGZ1biA9PSAicmF0aW8iKXsKICAgIAogICAgaWYoc3RkKXtwbG90X2RmIDwtIHBsb3RfZGYgJT4lCiAgICAgIGdyb3VwX2J5KGZhY3RvcnMpICU+JQogICAgICBtdXRhdGUoY29tcCA9IHNjYWxlKGNvbXAgLSAxLCBjZW50ZXIgPSBGKSkgJT4lICMgbWFrZSAiMSIgY29tcGFyaXNvbiAwCiAgICAgIHVuZ3JvdXAoKQogICAgfQogICAgCiAgICByZXN1bHRzIDwtIGxtZTQ6OmxtZXIoY29tcCB+IDAgKyBmYWN0b3JzICsgKDEgfCBzdWJpZCksIHBsb3RfZGYpCiAgfQogIAogIHJldHVybihyZXN1bHRzKQp9CmBgYAoKYGBge3J9CnN1bW1hcnkobmV3ZnVuX3N0YXQocmVuYW1lX2Z1bihkMSksIGVmYV9wbmFzZDEsIGZ1biA9ICJkaWZmIikpJGNvZWZmaWNpZW50cwpzdW1tYXJ5KG5ld2Z1bl9zdGF0KHJlbmFtZV9mdW4oZDIpLCBlZmFfcG5hc2QyLCBmdW4gPSAiZGlmZiIpKSRjb2VmZmljaWVudHMKc3VtbWFyeShuZXdmdW5fc3RhdChkMyAlPiUKICAgICAgICAgICAgICAgICAgICAgIHJlbmFtZV9mdW4oKSAlPiUKICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdCgtY29uZGl0aW9uKSAlPiUKICAgICAgICAgICAgICAgICAgICAgIHJlbmFtZShjb25kaXRpb24gPSB0YXJnZXQpLCAKICAgICAgICAgICAgICAgICAgICBlZmFfcG5hc2QxLCBmdW4gPSAiZGlmZiIpKSRjb2VmZmljaWVudHMKc3VtbWFyeShuZXdmdW5fc3RhdChyZW5hbWVfZnVuKGQ0KSwgZWZhX3BuYXNkNCwgZnVuID0gImRpZmYiKSkkY29lZmZpY2llbnRzCmBgYAoKYGBge3J9CnBsb3QwNWEgPC0gbmV3ZnVuKGRmID0gcmVuYW1lX2Z1bihkMSksIHdoaWNoX2VmYSA9IGVmYV9wbmFzZDEsCiAgICAgICAgICAgICAgICAgIGZ1biA9ICJyYXRpbyIsIHBvaW50cyA9IEYsCiAgICAgICAgICAgICAgICAgIGNvbG9ycyA9IGMoIiNmYjlhOTkiLCAiIzFmNzhiNCIpKQoKcGxvdDA1YiA8LSBuZXdmdW4oZGYgPSByZW5hbWVfZnVuKGQyKSwgd2hpY2hfZWZhID0gZWZhX3BuYXNkMiwgCiAgICAgICAgICAgICAgICAgIGZ1biA9ICJyYXRpbyIsIHBvaW50cyA9IEYsCiAgICAgICAgICAgICAgICAgIGNvbG9ycyA9IGMoIiNmYjlhOTkiLCAiIzFmNzhiNCIpKQoKcGxvdDA1YyA8LSBuZXdmdW4oZGYgPSBkMyAlPiUKICAgICAgICAgICAgICAgICAgICByZW5hbWVfZnVuKCkgJT4lCiAgICAgICAgICAgICAgICAgICAgc2VsZWN0KC1jb25kaXRpb24pICU+JQogICAgICAgICAgICAgICAgICAgIHJlbmFtZShjb25kaXRpb24gPSB0YXJnZXQpLAogICAgICAgICAgICAgICAgICB3aGljaF9lZmEgPSBlZmFfcG5hc2QzLCAKICAgICAgICAgICAgICAgICAgZnVuID0gInJhdGlvIiwgcG9pbnRzID0gRiwKICAgICAgICAgICAgICAgICAgY29sb3JzID0gYygiI2ZiOWE5OSIsICIjMWY3OGI0IikpCgpwbG90MDVkIDwtIG5ld2Z1bihkZiA9IHJlbmFtZV9mdW4oZDQpLCB3aGljaF9lZmEgPSBlZmFfcG5hc2Q0LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuID0gInJhdGlvIiwgcG9pbnRzID0gRiwKICAgICAgICAgICAgICAgICAgY29sb3JzID0gY29sb3JzMjEpCmBgYAoKYGBge3J9CmZpZzA1X3Bsb3RzIDwtIHBsb3RfZ3JpZChwbG90MDVhLCBwbG90MDViLCBwbG90MDVjLCBwbG90MDVkLCBucm93ID0gMSwKICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9ICJBVVRPIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNiwgZmlnLmFzcCA9IDAuNCwgaW5jbHVkZSA9IFR9CmZpZzA1X3Bsb3RzCmBgYAoKYGBge3J9CnN1bW1hcnkobmV3ZnVuX3N0YXQocmVuYW1lX2Z1bihkMSksIGVmYV9wbmFzZDEsIGZ1biA9ICJyYXRpbyIpKSRjb2VmZmljaWVudHMKc3VtbWFyeShuZXdmdW5fc3RhdChyZW5hbWVfZnVuKGQyKSwgZWZhX3BuYXNkMiwgZnVuID0gInJhdGlvIikpJGNvZWZmaWNpZW50cwpzdW1tYXJ5KG5ld2Z1bl9zdGF0KGQzICU+JQogICAgICAgICAgICAgICAgICAgICAgcmVuYW1lX2Z1bigpICU+JQogICAgICAgICAgICAgICAgICAgICAgc2VsZWN0KC1jb25kaXRpb24pICU+JQogICAgICAgICAgICAgICAgICAgICAgcmVuYW1lKGNvbmRpdGlvbiA9IHRhcmdldCksIAogICAgICAgICAgICAgICAgICAgIGVmYV9wbmFzZDEsIGZ1biA9ICJyYXRpbyIpKSRjb2VmZmljaWVudHMKc3VtbWFyeShuZXdmdW5fc3RhdChyZW5hbWVfZnVuKGQ0KSwgZWZhX3BuYXNkNCwgZnVuID0gInJhdGlvIikpJGNvZWZmaWNpZW50cwpgYGAKCmBgYHtyfQpjb3JmdW4gPC0gZnVuY3Rpb24oZGYsIHdoaWNoX2VmYSl7CiAgZGYgJT4lCiAgICByZW5hbWVfZnVuKCkgJT4lCiAgICBjYXRzY29yZV9mdW5fcG5hcyh3aGljaF9lZmEgPSB3aGljaF9lZmEpICU+JQogICAgZGlzdGluY3QoKSAlPiUKICAgIHNwcmVhZChmYWN0b3IsIHNjb3JlKSAlPiUKICAgIHNlbGVjdChzdGFydHNfd2l0aCgiRiIpKSAlPiUKICAgIGNvcigpCn0KYGBgCgpgYGB7cn0KY29yZnVuKGQxLCBlZmFfcG5hc2QxKSAlPiUgcm91bmQoMikKY29yZnVuKGQyLCBlZmFfcG5hc2QyKSAlPiUgcm91bmQoMikKY29yZnVuKGQzLCBlZmFfcG5hc2QzKSAlPiUgcm91bmQoMikKY29yZnVuKGQ0LCBlZmFfcG5hc2Q0KSAlPiUgcm91bmQoMikKYGBgCgpgYGB7cn0KbG0oRjIgfiBwb2x5KEYxLCAzKSwgCiAgIGRhdGEgPSBkMSAlPiUKICAgICByZW5hbWVfZnVuKCkgJT4lCiAgICAgY2F0c2NvcmVfZnVuX3BuYXMoZWZhX3BuYXNkMSkgJT4lCiAgICAgZGlzdGluY3QoKSAlPiUKICAgICBzcHJlYWQoZmFjdG9yLCBzY29yZSkpICU+JQogIHN1bW1hcnkoKQoKbG0oRjMgfiBwb2x5KEYxLCAzKSwgCiAgIGRhdGEgPSBkMSAlPiUKICAgICByZW5hbWVfZnVuKCkgJT4lCiAgICAgY2F0c2NvcmVfZnVuX3BuYXMoZWZhX3BuYXNkMSkgJT4lCiAgICAgZGlzdGluY3QoKSAlPiUKICAgICBzcHJlYWQoZmFjdG9yLCBzY29yZSkpICU+JQogIHN1bW1hcnkoKQoKbG0oRjMgfiBwb2x5KEYyLCAzKSwgCiAgIGRhdGEgPSBkMSAlPiUKICAgICByZW5hbWVfZnVuKCkgJT4lCiAgICAgY2F0c2NvcmVfZnVuX3BuYXMoZWZhX3BuYXNkMSkgJT4lCiAgICAgZGlzdGluY3QoKSAlPiUKICAgICBzcHJlYWQoZmFjdG9yLCBzY29yZSkpICU+JQogIHN1bW1hcnkoKQpgYGAKCmBgYHtyfQpsbShGMiB+IHBvbHkoRjEsIDMpLCAKICAgZGF0YSA9IGQ0ICU+JQogICAgIHJlbmFtZV9mdW4oKSAlPiUKICAgICBjYXRzY29yZV9mdW5fcG5hcyhlZmFfcG5hc2Q0KSAlPiUKICAgICBkaXN0aW5jdCgpICU+JQogICAgIHNwcmVhZChmYWN0b3IsIHNjb3JlKSkgJT4lCiAgc3VtbWFyeSgpCgpsbShGMyB+IHBvbHkoRjEsIDMpLCAKICAgZGF0YSA9IGQ0ICU+JQogICAgIHJlbmFtZV9mdW4oKSAlPiUKICAgICBjYXRzY29yZV9mdW5fcG5hcyhlZmFfcG5hc2Q0KSAlPiUKICAgICBkaXN0aW5jdCgpICU+JQogICAgIHNwcmVhZChmYWN0b3IsIHNjb3JlKSkgJT4lCiAgc3VtbWFyeSgpCgpsbShGMyB+IHBvbHkoRjIsIDMpLCAKICAgZGF0YSA9IGQ0ICU+JQogICAgIHJlbmFtZV9mdW4oKSAlPiUKICAgICBjYXRzY29yZV9mdW5fcG5hcyhlZmFfcG5hc2Q0KSAlPiUKICAgICBkaXN0aW5jdCgpICU+JQogICAgIHNwcmVhZChmYWN0b3IsIHNjb3JlKSkgJT4lCiAgc3VtbWFyeSgpCmBgYAoKCiMgQXBwbGljYXRpb24KCmBgYHtyfQpwbG90MDNhIDwtIGFwcF9wbG90X2Z1bl9wbmFzKGQxICU+JSByZW5hbWVfZnVuKCksIGVmYV9wbmFzZDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JzID0gYygiI2ZiOWE5OSIsICIjMWY3OGI0IiksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXBlcyA9IGMoMTYsIDE1KSkgKwogIGxhYnModGl0bGUgPSAiV2Vpc21hbiBldCBhbC4gKDIwMTcpOiBTdHVkeSAxIikKCnBsb3QwM2IgPC0gYXBwX3Bsb3RfZnVuX3BuYXMoZDIgJT4lIHJlbmFtZV9mdW4oKSwgZWZhX3BuYXNkMiwgIyBjb3VkbCBkbyBlZmFfcG5hc2QxCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JzID0gYygiI2ZiOWE5OSIsICIjMWY3OGI0IiksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXBlcyA9IGMoMTYsIDE1KSkgKwogIGxhYnModGl0bGUgPSAiV2Vpc21hbiBldCBhbC4gKDIwMTcpOiBTdHVkeSAyIikKCnBsb3QwM2MgPC0gYXBwX3Bsb3RfZnVuX3BuYXMoZDMgJT4lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuYW1lX2Z1bigpICU+JQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdCgtY29uZGl0aW9uKSAlPiUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5hbWUoY29uZGl0aW9uID0gdGFyZ2V0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZmFfcG5hc2QzLCAjIGNvdWRsIGRvIGVmYV9wbmFzZDEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcnMgPSBjKCIjZmI5YTk5IiwgIiMxZjc4YjQiKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcGVzID0gYygxNiwgMTUpKSArCiAgbGFicyh0aXRsZSA9ICJXZWlzbWFuIGV0IGFsLiAoMjAxNyk6IFN0dWR5IDMiKQoKcGxvdDAzZCA8LSBhcHBfcGxvdF9mdW5fcG5hcyhkNCAlPiUgcmVuYW1lX2Z1bigpLCBlZmFfcG5hc2Q0LCAjIGNvdWRsIGRvIGVmYV9wbmFzZDEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcnMgPSBjb2xvcnMyMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFwZXMgPSByZXAoMTYsIDIxKSkgKwogIGxhYnModGl0bGUgPSAiV2Vpc21hbiBldCBhbC4gKDIwMTcpOiBTdHVkeSA0IikKYGBgCgpgYGB7cn0KZmlnMDNfcGxvdHMgPC0gcGxvdF9ncmlkKHBsb3RfZ3JpZChwbG90MDNhLCBwbG90MDNiLCBwbG90MDNjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5yb3cgPSAxLCBsYWJlbHMgPSAiQVVUTyIsIHNjYWxlID0gMC45NSksCiAgICAgICAgICAgICAgICAgICAgICAgICBwbG90X2dyaWQocGxvdDAzZCwgbGFiZWxzID0gIkQiLCBzY2FsZSA9IDAuOTg1KSwKICAgICAgICAgICAgICAgICAgICAgICAgIG5yb3cgPSAyLCByZWxfaGVpZ2h0cyA9IGMoMSwgMikpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDcsIGZpZy5hc3AgPSAwLjgsIGluY2x1ZGUgPSBUfQpmaWcwM193aXRoX2NhcHRpb24gPC0gYWRkX3N1YihmaWcwM19wbG90cywgc3RyX3dyYXAoIkZpZ3VyZSAzLjM6IE1lYW4gZW5kb3JzZW1lbnRzIG9mIEJPRFksIEhFQVJULCBhbmQgTUlORCBjYXBhY2l0aWVzIGFtb25nIGFkdWx0cyBpbiBXZWlzbWFuIGV0IGFsLiAoMjAxNyksIFN0dWRpZXMgMS00IChBLUQpLiBGb3IgZWFjaCBzdHVkeSwgRUZBIHdhcyB1c2VkIHRvIGRldGVybWluZSB3aGljaCBjYXBhY2l0aWVzIHdlcmUgY29uc2lkZXJlZCBwYXJ0IG9mIEJPRFksIEhFQVJULCBhbmQgTUlORCAoc2VlIG1haW4gdGV4dCkuIEZvciBlYWNoIGNhcGFjaXR5LCBkZWdyZWUgb2YgZW5kb3JzZW1lbnQgY291bGQgcmFuZ2UgZnJvbSAwIChub3QgYXQgYWxsIGNhcGFibGUpIHRvIDYgKGZ1bGx5IGNhcGFibGUpLiBFcnJvciBiYXJzIGFyZSA5NSUgYm9vdHN0cmFwcGVkIGNvbmZpZGVuY2UgaW50ZXJ2YWxzLiAoU2VlIGFsc28gRmlndXJlIDMuMi4pIiwgMTUwKSwgeCA9IDAsIGhqdXN0ID0gMCkKZ2dkcmF3KGZpZzAzX3dpdGhfY2FwdGlvbikKYGBgCgpgYGB7cn0KIyBsaWJyYXJ5KHBsb3RseSkKIyBwbG90X2x5KGNhdHNjb3JlX2Z1bl9wbmFzKGQ0ICU+JSByZW5hbWVfZnVuKCksIGVmYV9wbmFzZDQpICU+JQojICAgICAgICAgICBzcHJlYWQoZmFjdG9yLCBzY29yZSksIAojICAgICAgICAgeCA9IH5GMSwgeSA9IH5GMiwgeiA9IH5GMywgCiMgICAgICAgICB0ZXh0ID0gfmNvbmRpdGlvbiwgY29sb3IgPSB+Y29uZGl0aW9uLAojICAgICAgICAgY29sb3JzID0gY29sb3JzMjEpICU+JQojICAgYWRkX21hcmtlcnMoKSAlPiUKIyAgIGxheW91dChzY2VuZSA9IGxpc3QoeGF4aXMgPSBsaXN0KHRpdGxlID0gJ0JPRFknKSwKIyAgICAgICAgICAgICAgICAgICAgICAgeWF4aXMgPSBsaXN0KHRpdGxlID0gJ0hFQVJUJyksCiMgICAgICAgICAgICAgICAgICAgICAgIHpheGlzID0gbGlzdCh0aXRsZSA9ICdNSU5EJykpKQpgYGAKCmBgYHtyfQojIGxpYnJhcnkocGxvdGx5KQojIHBsb3RfbHkoY2F0c2NvcmVfZnVuX3BuYXMoZDQgJT4lIHJlbmFtZV9mdW4oKSwgZWZhX3BuYXNkNCkgJT4lCiMgICAgICAgICAgIGdyb3VwX2J5KGNvbmRpdGlvbiwgZmFjdG9yKSAlPiUKIyAgICAgICAgICAgc3VtbWFyaXNlKG1lYW4gPSBtZWFuKHNjb3JlLCBuYS5ybSA9IFQpKSAlPiUKIyAgICAgICAgICAgdW5ncm91cCgpICU+JQojICAgICAgICAgICBzcHJlYWQoZmFjdG9yLCBtZWFuKSwgCiMgICAgICAgICB4ID0gfkYxLCB5ID0gfkYyLCB6ID0gfkYzLCAKIyAgICAgICAgIHRleHQgPSB+Y29uZGl0aW9uLCBjb2xvciA9IH5jb25kaXRpb24sCiMgICAgICAgICBjb2xvcnMgPSBjb2xvcnMyMSkgJT4lCiMgICBhZGRfbWFya2VycygpICU+JQojICAgbGF5b3V0KHNjZW5lID0gbGlzdCh4YXhpcyA9IGxpc3QodGl0bGUgPSAnQk9EWScpLAojICAgICAgICAgICAgICAgICAgICAgICB5YXhpcyA9IGxpc3QodGl0bGUgPSAnSEVBUlQnKSwKIyAgICAgICAgICAgICAgICAgICAgICAgemF4aXMgPSBsaXN0KHRpdGxlID0gJ01JTkQnKSkpCmBgYAo=